package com.oldbook.manage.mapper;

import com.oldbook.manage.domain.Order;
import com.oldbook.manage.domain.vo.OrderVO;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;

import java.time.LocalDate;
import java.util.List;

/**
 * 教材订单Mapper接口
 * 
 * @author Exiaoke
 * @date 2025-02-17
 */
public interface OrderMapper 
{
    /**
     * 查询教材订单
     * 
     * @param orderId 教材订单主键
     * @return 教材订单
     */
    public OrderVO selectOrderByOrderId(Long orderId);

    /**
     * 查询教材订单列表
     * 
     * @param order 教材订单
     * @return 教材订单集合
     */
    public List<OrderVO> selectOrderList(OrderVO order);

    /**
     * 新增教材订单
     * 
     * @param order 教材订单
     * @return 结果
     */
    public int insertOrder(Order order);

    /**
     * 修改教材订单
     * 
     * @param order 教材订单
     * @return 结果
     */
    public int updateOrder(Order order);

    /**
     * 删除教材订单
     * 
     * @param orderId 教材订单主键
     * @return 结果
     */
    public int deleteOrderByOrderId(Long orderId);

    /**
     * 批量删除教材订单
     * 
     * @param orderIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteOrderByOrderIds(Long[] orderIds);

    /**
     *
     * @return
     */
    List<Order> getOverdueOrders();

    /**
     *
     * @param orderId
     * @param status
     * @return
     */
    @Update("UPDATE tb_order SET status = #{status} WHERE order_id = #{orderId}")
    boolean updateOrderStatus(@Param("orderId") Long orderId,@Param("status") String status);

    /**
     * 根据学号查询订单
     * @return
     */
    List<OrderVO> selectStudentIdOrder(String studentId);

    /**
     * 批量更新订单状态
     */
    void batchUpdateOrderStatus(@Param("orderIds") List<Long> orderIds, @Param("status") String status);

    /**
     *更新订单最后扣分日期
     * @param orderId
     * @param deductionDate
     */
    void updateLastDeductionDate(@Param("deductionDate") LocalDate deductionDate,@Param("orderId") Long orderIde);

    /**
     * 创建订单
     * @param studentId
     * @param textbookId
     * @param quantity
     */
    void createOrder(@Param("studentId") String studentId,
                     @Param("textbookId") Long textbookId,
                     @Param("quantity") Integer quantity);
}


